/*
 * HuffNodo.h
 *
 *  Created on: 09/06/2014
 *      Author: manuel
 */

#ifndef HUFFNODO_H_
#define HUFFNODO_H_

#include <stdio.h>
#include <iostream>

class HuffNodo {
public:
	HuffNodo();
	HuffNodo(unsigned int freq, unsigned char simbolo, HuffNodo* hijoIzquierdo, HuffNodo* hijoDerecho);
	virtual ~HuffNodo();

	HuffNodo* hijoIzq;
	HuffNodo* hijoDer;

	unsigned int getFreq() const ;
	unsigned char getCaracter() const;
	void setFreq(unsigned int fq);
	void aumentarFreq();
	void setParametros(unsigned int fq, unsigned char simbolo);

	bool esHoja();

	inline bool operator<(const HuffNodo& otro) const {
		if( freq<otro.getFreq() )
			return true;
		else
			return false;
	}

	inline bool operator<=(const HuffNodo& otro) const {
		if( freq<=otro.getFreq() )
			return true;
		else {
			return false;
		}
	}

	inline bool operator>(const HuffNodo& otro) const {
		return !( *this<=otro );
	}

	inline bool operator >=(const HuffNodo& otro) const {
		return !( *this<otro );
	}

	inline friend std::ostream& operator<<(std::ostream& out, const HuffNodo& nodo) {
		return out << "Nodo-> caracter:" << nodo.getCaracter() << ", freq:" << nodo.getFreq() << '\n';
	}

	void imprimir();
private:
	unsigned int freq;
	unsigned char caracter;
};

#endif /* HUFFNODO_H_ */
